<?php
/**
 * Класс создан для получения списка модулей из соответсвующего xml конфига. Используется
 * исключительно в технических целях в бэкэнде системы управления
**/
class CmsModule /*extends A_SingleContent*/   {
	
	private $_data = array();
	
	/**
	 * Pointer to self
	 *
	 * @var self
	 */
	private static $_instance;
	
	/**
	 * Return current object instance
	 * @var $config Zend_Config_Ini|String
	 * @return CmsModule
	 */
	public static function getInstance()
    {
        if (null === self::$_instance) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
	
	protected function __construct() {
		
		$main = MF_Main::getInstance();
		
		$config = $main->Utils->fixDirPath($main->_config->general->config_path).$main->_config->modules->modules_ini;
		
		$xmlDoc = $main->Utils->ParseXML($config);
		$moduleNodes = $xmlDoc->getElementsByTagName('module');
		if ($moduleNodes!==null) {
			for ($m=0;$m<$moduleNodes->getLength();$m++) {
				array_push($this->_data,
					new SingleModule(
							$moduleNodes->item($m)->getAttribute('key'),
							$moduleNodes->item($m)->getAttribute('name'),
							$moduleNodes->item($m)->getAttribute('use')
						));
			}
		}
		
	}
	
	/**
	 * Returns module information
	 *
	 * @param integer $idx
	 * @return SingleModule
	 */
	public function item($idx) {
		return $this->_data[$idx];
	}
	
	public function length() {
		return count($this->_data);
	}
	
	/**
	 * Checks if module is turned on
	 *
	 * @param String $key - module key name
	 * @return boolean
	 */
	public function isActive($key) {
		return in_array($key,$this->_data_idx);
	}
	
	
}

class SingleModule {
	
	public 
		$key,
		$name,
		$use;
	
	private  
		$_key,
		$_name,
		$_use;
		
	public function __construct($key,$name,$use) {
		unset($this->key);
		unset($this->name);
		unset($this->use);
		
		$this->_key = $key;
		$this->_name = $name;
		$this->_use = $use;
	}
	
	function __get($param) {
		switch ($param) {
			case 'key':
				return $this->_key;
				break;
			case 'name':
				return $this->_name;
				break;
			case 'use':
				return $this->_use;
				break;
		}
	}
	
}